#include "<SampleEd$Dir>.h.Driver"
#include "osfile.h"
#include "kernel.h"

/* Export Armadeus file */

osbool driver_export(char *filename,int export_index,int filetype,int samplerate,int channels,int start,int size)
    {
    char byte,
         rate;           /* Sample rate from file        */

    int index,           /* Index through file           */
        pc,              /* Percentage complete          */
        lastpc = 0,      /* Previous percentage complete */
        left,
        right,
        real_channels;

    FILE *fh;

    _kernel_swi_regs r;

    NOT_USED(channels);
    NOT_USED(export_index);

/* Open file for reading */

    if ((fh = fopen(filename,"w")) == NULL)
        {
        driver_report_error("DrvErrOpenW");
        return TRUE;
        }

/* Calculate sample rate as we need it */

    rate = 1000000 / samplerate;

/* Write sample rate */

    if (fwrite(&rate,1,1,fh) != 1)
        {
        fclose(fh);
        driver_report_error("DrvErrWrite");
        return TRUE;
        }

/* Set initial percentage */

    driver_percentage(0);

/* get real number of channels */

    driver_get_sample_details(NULL,NULL,&real_channels,NULL);

/* Loop round file */

    for (index = start;
         index < size;
         index++)
        {
/* Calculate percentage complete */

        pc = 100 * (index - start) / (size - start);

/* Set new percentage if changed */

        if (pc > lastpc)
            {
            driver_percentage(pc);
            lastpc = pc;
            }

/* Get byte from sample */

        if (real_channels > 1)
            {
            driver_mix(index,1,&left,&right);
            byte = left >> 8;
            }
        else
            {
            byte = driver_get_sample(index,0) >> 8;
            }

/* Write byte from file */

        if (fwrite(&byte,1,1,fh) != 1)
            {
            driver_report_error("DrvErrWrite");
            fclose(fh);
            return TRUE;
            }

        }

    fclose(fh);

    r.r[0] = OSFile_SetType;
    r.r[1] = (int)filename;
    r.r[2] = (int)filetype;

    _kernel_swi(XOS_File,&r,&r);

    return FALSE;
    }
